import matplotlib.pyplot as plt
import numpy as np

# 设置支持 Unicode 的字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

def demonstrate_exponential_composite_continuity():
    x = np.linspace(0.5, 2.5, 1000)
    
    # 定义f(x)和g(x)，在x=1处都连续
    f = lambda x: x**2 + 1  # f(1) = 2 > 0
    g = lambda x: 2*x + 1
    
    # 指数型复合函数
    y = f(x)**g(x)
    
    # 验证在x=1处的连续性
    x0 = 1
    f_x0 = f(x0)
    g_x0 = g(x0)
    y_x0 = f_x0**g_x0
    
    print("指数型复合函数连续性验证:")
    print(f"在 x = {x0} 处:")
    print(f"f({x0}) = {f_x0} > 0")
    print(f"g({x0}) = {g_x0}")
    # 修复这里：使用g(x0)而不是g({x0})
    print(f"y({x0}) = f({x0})^{g(x0)} = {y_x0:.6f}")
    
    # 计算左右极限
    x_left = x0 - 0.001
    x_right = x0 + 0.001
    
    y_left = f(x_left)**g(x_left)
    y_right = f(x_right)**g(x_right)
    
    print(f"lim(x→{x0}-) y = {y_left:.6f}")
    print(f"lim(x→{x0}+) y = {y_right:.6f}")
    print(f"连续性成立: {abs(y_left - y_x0) < 1e-4 and abs(y_right - y_x0) < 1e-4}")
    
    # 绘制图像
    plt.figure(figsize=(10, 8))
    
    plt.subplot(2, 2, 1)
    plt.plot(x, f(x), 'b-', linewidth=2, label='f(x) = x² + 1')
    plt.axvline(x=x0, color='r', linestyle='--', alpha=0.7)
    plt.scatter([x0], [f_x0], color='red', s=50)
    plt.title('函数 f(x)')
    plt.grid(True)
    plt.legend()
    
    plt.subplot(2, 2, 2)
    plt.plot(x, g(x), 'g-', linewidth=2, label='g(x) = 2x + 1')
    plt.axvline(x=x0, color='r', linestyle='--', alpha=0.7)
    plt.scatter([x0], [g_x0], color='red', s=50)
    plt.title('函数 g(x)')
    plt.grid(True)
    plt.legend()
    
    plt.subplot(2, 2, 3)
    # 使用对数变换避免数值问题
    log_y = g(x) * np.log(f(x))
    plt.plot(x, log_y, 'orange', linewidth=2, label='g(x)lnf(x)')
    plt.axvline(x=x0, color='r', linestyle='--', alpha=0.7)
    plt.scatter([x0], [g_x0 * np.log(f_x0)], color='red', s=50)
    plt.title('中间函数: g(x)lnf(x)')
    plt.grid(True)
    plt.legend()
    
    plt.subplot(2, 2, 4)
    plt.plot(x, y, 'purple', linewidth=2, label='y = f(x)^g(x)')
    plt.axvline(x=x0, color='r', linestyle='--', alpha=0.7)
    plt.scatter([x0], [y_x0], color='red', s=50)
    plt.title('指数型复合函数')
    plt.grid(True)
    plt.legend()
    
    plt.tight_layout()
    plt.show()

# 调用函数
demonstrate_exponential_composite_continuity()